Scroll to navigation

sed(1) 2007-10-27-16:31 sed(1)

Назва

sed - потоковий редактор (Stream EDitor)

Стислий огляд

sed [-n] [-V] [--quiet] [--silent] [--version] [--help] [-e script] [--expression=script] [-f script-file] [--file=script-file] [script-if-no-other-script] [file...]

Опис

sed являється потоковим редактором. Потоковий редактор використовується для здійснення базових трансформувань ввідного потоку (файлу або вводу через конвеєр). Хоч і в чомусь подібний на редактори, що дозволяють редагування за сценарієм (такі як ed(1), наприклад), sed працює шляхом тільки одноразового проходження через ввід, а отже ефективніший. Але здатність sed фільтрувати текст, що надійшов з конвеєру, виділяє його серед інших типів редакторів.

sed можна викликати з наступними опціями:


Пригнічує звичайний вивід.


Додати сценарій script до списку виконуваних команд.


Додати зміст файлу script-file до списку виконуваних команд.


Редагує файли на місці (робить резервні копії, якщо вказано закінчення файлу suffix).


Вказує бажану довжину завертання рядка для команди l.


Використає розширені регулярні вирази в сценарії.


Розгляне файли як відокремленні замість одного неперервного потоку.


Завантажить мінімальну кількість даних з ввідних файлів і звільнятиме буфери виводу частіше.


Виведе допомогу по вживанню програми.


Виведе інформацію про версію програми.

Якщо на командному рядкові не вказано опцій -e, --expression, -f або --file, тоді найперший аргумент, що не являється опцією буде взято як сценарій для інтерпретації редактором sed. Решта аргументів вважатимуться назвами файлів; якщо не вказано жодного файлу вводу, тоді читатиметься стандартний ввід.

Огляд команд

Наступне являється стислим оглядом команд sed як довідник для тих, хто вже знає sed; для докладнішого опису слід звернутися до іншої документації (скажімо, докумет у texinfo форматі).

Команди без адреси

label: Мітка label для команд b та t.

# comment

Коментар comment, що простягнеться до наступного нового рядка (або кінця відрізку сценарію, що слідує за -e).

}

Закриваюча дужка блоку { }.

Команди без адреси або з однією адресою

=

Вивести номер поточного рядка.


text
Додати текст text, що матиме кожен знак нового рядка екрановано зворотнім слешом.


text
Вставити текст text, що матиме кожний знак нового рядка екрановано зворотнім слешом.


Негайно завершити сценарій sed без подальшої обробки вводу, за винятком, коли не вимкнено автоматичного виводу, поточні рядки буде виведено.


Негайно завершити роботу sed-сценарію без обробки додаткового вводу.


Додати текст, прочитаний із файлу filename.


Додати рядок, прочитаний із файлу filename.

Команди, що дозволяють діапазон адрес

{

Розпочинає блок команд (завершується відповідною }).


Перескочити до мітки label; якщо мітку опущено, перейде до кінця сценарію.


Якщо s/// здійснила вдалу заміну, з тих пір як було прочитано останній рядок вводу і з часу виконання останньої команди t або T, тоді перескочити до мітки label; якщо мітку опущено, перейти до кінця сценарію.


Якщо s/// не здійснила вдалої заміни, з тих пір як було прочитано останній рядок вводу і з часу виконання останньої команди t або T, тоді перескочити до мітки label; якщо мітку опущено, перейти до кінця сценарію.


text
Замінить обрані рядки на текст text, що матиме кожний знак нового рядка екрановано зворотнім слешом.


Видалить те що співпало зі зразком, розпочне наступний цикл.


Видалить до першого знаку нового рядка серед того, що співпало зі зразком. Розпочне наступний цикл, але запобігатиме читанню вводу, якщо залишились дані в області співпадання.


Копіює/додає область співпадання до області зберігання.


Копіює/додає область зберігання до області співпадання.


Поміняти місцями область зберігання і область співпадання.


Оголосити поточний рядок у "візуально-неоднозначній" формі.


Прочитати/додати наступний рядок до області співпадання.


Вивести поточну область співпадання.


Вивести поточну область співпадання до першого ж знаку нового рядка.


Спробувати зіставити регулярний вираз regexp із областю співпадання. Якщо вдалося, замінити частину, що співпала виразом replacement . Вираз заміни може містити спеціальний знак &, що вказуватиме на ту частину області співпадання, яка збіглася, і спеціальні керовні послідовності \1 до \9 для посилання на відповідні підвирази що співпали з частинами regexp.


Записати поточну область співпадання до файлу filename.


Записати перший рядок поточної області співпадання до файлу filename.


Здійснити транслітерацію знаків області співпадання, вказаних у source у відповідні знаки dest.

Адреси

Команди sed можуть бути заданими без адрес, в такому разі команди виконуються для всіх рядків вводу. Якщо задати одну адресу, команду буде виконано тільки для рядків вводу, що співпали з цією адресою. Якщо задати дві адреси, команди буде виконано для діапазону рядків, що співпали з першою до другої адреси, включно. Існує три речі, які варто зауважити щодо діапазонів адрес: синтаксис виглядатиме як addr1,addr2 (тобто адреси потрібно розділити комою); рядок, що відповідає addr1 завжди оброблятиметься, навіть якщо addr2 вказує на попередню адресу; і якщо addr2 - це регулярний вираз, він не зіставлятиметься з рядком, який співпав з addr1.

Після адреси (або діапазону адрес) можна добавити !, що вказуватиме, що команду слід виконати тільки в тому випадку, коли адреса (або діапазон адрес) не співпадає.

Підтримуються наступні типи адрес:


Співпаде тільки з рядком номер number.


Співпадатиме з кожною адресою на віддалі step рядків, починаючи з рядком first. Наприклад, "sef -n 1~2p" видрукує всі непарні рядки потоку вводу, тоді як 2~5 співпадатиме з кожним п'ятим рядком, починаючи з другого. (Ця риса являється розширенням.)

$

Співпаде з останнім рядком.

/regexp/

Співпаде з адресами рядків, що збігаються з регулярним виразом regexp.


Співпаде з адресами рядків, що збігаються з регулярним виразом regexp. c може бути будь-яким знаком.

sed GNU також підтримує спеціальні 2-адресні форми:

0,addr2

Розпочати пошук уже в стані "першої адреси, яка вже співпала" до тих пір, доки знайдено addr2. Це аналогічно 1,addr1 за винятком того, що у випадку, коли addr2 співпаде з першим рядком вводу, то 0,addr2 форма буде в кінці діапазону, тоді як 1,addr2 все ще на його початку.


Співпадае з адресою addr1 і наступними N рядками, що слідують за нею.


Співпаде з addr1 рядками, що слідують за нею до рядка, кратного N.

Регулярні вирази

Повинні підтримуватись POSIX.2 BRE, але не повністю через проблеми з ефективністю. Подлідовність \n в регулярних виразах співпадає зі знаком нового рядка, те саме стосується відповідних знаків для \a, \t та інших керівних послідовностей.

Вади

Надсилайте повідомлення про помилки на bonzini@gnu.org. Впевністься, що ви включили слово "sed" десь у полі "Subject:". Також, будь ласка, включіть вивід команди "sed --version" в тілі вашого повідомлення, якщо це можливо.

Дивіться також

awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, будь-які з різноманітних книжок про sed, ЧАПи по sed (http://sed.sf.net/grabbag/tutorials/sedfaq.html), http://sed.sf.net/grabbag/.

Повна документація по sed підтримується як посібник Texinfo. Якщо програми info і sed встановлено на вашій системі, команда


info sed
повинна надати вам доступ до повного посібника.

2007-10-27-16:31 © 2005-2007 DLOU, GNU FDL